
#include "nane/core/crt/Win32/Win32ReadFile_.h"
#include "nane/core/function/Functor.h"
#include "nane/core/assert.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    Win32ReadFile::Win32ReadFile( FileSystem::Implementation* _creator, HANDLE _interface, const char* _filename )
        : Win32FileBase( _creator, _interface, _filename )
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    Win32ReadFile::~Win32ReadFile()
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    uint32 Win32ReadFile::Read( byte* _buffer, uint32 _count )
    {
        NANE_ASSERT_RV( interface != INVALID_HANDLE_VALUE, "file handle must be valid", 0 );
        DWORD bytesRead = 0;
        ::ReadFile(interface, _buffer, static_cast<DWORD>(_count), &bytesRead, NULL);
        return static_cast<uint32>(bytesRead);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void Win32ReadFile::Dispose()
    {
        creator->Release(this);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
